
package com.tecsup.oper.dao;




	import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import util.ConexionBD;

import com.tecsup.oper.modelo.Producto;

import excepcion.DAOExcepcion;


		public class GestionarProductoDAO extends BaseDAO{
		
		
		public Collection<Producto> buscarPorNombre(String nombre) throws DAOExcepcion {
			System.out.println("GestionarProductorDAO: buscarPorNombre(String nombre)");
			String query ="SELECT * from producto where nombre like ? "; 
				
		Collection<Producto> lista = new ArrayList<Producto>();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, "%"+nombre +"%");
				rs = stmt.executeQuery();
				while (rs.next()) {
					Producto l = new Producto();
					l.setIdProducto(rs.getInt("idProducto"));
					l.setNombre(rs.getString("nombre"));
					l.setPrecioUnitario(rs.getDouble("precioUnitario"));
					l.setDescripcion(rs.getString("descripcion"));
					l.setStock(rs.getInt("stock"));
					l.setReservados(rs.getInt("reservados"));
					lista.add(l);
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return lista;
		}
		
		public Collection<Producto> listar() throws DAOExcepcion {
			System.out.println("GestionarProductoDAO: listar()");
			Collection<Producto> lista = new ArrayList<Producto>();

			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;

			try {
				con = ConexionBD.obtenerConexion();
				String query = "SELECT * from producto";
				stmt = con.prepareStatement(query);
				rs = stmt.executeQuery();
				while (rs.next()) {
					
				
					Producto l = new Producto();
					l.setIdProducto(rs.getInt("idProducto"));
					l.setNombre(rs.getString("nombre"));
					l.setPrecioUnitario(rs.getDouble("periodo"));
					l.setDescripcion(rs.getString("descripcion"));
					l.setStock(rs.getInt("stock"));
					l.setReservados(rs.getInt("reservados"));
					lista.add(l);
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return lista;
		}

		
		public Producto obtener(int idProducto) throws DAOExcepcion {
			System.out.println("GestionarProductoDAO: obtener(int idProducto)");
			Producto l = new Producto();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try {
				String query ="SELECT *from producto where idProducto=?"; 		
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, idProducto);
				rs = stmt.executeQuery();
				if (rs.next()) {
					l.setIdProducto(rs.getInt(1));
					l.setNombre(rs.getString(2));
					l.setStock(rs.getInt(3));
					
					
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return l;
		}

		
		public void actualizar(Producto l) throws DAOExcepcion {
			System.out.println("GestionarProductoDAO: actualizar(Producto l)");
			String query = "update producto set stock where nombre=?";
			Connection con = null;
			PreparedStatement stmt = null;
			try {
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setString(1, l.getNombre());
			
				int i = stmt.executeUpdate();
				if (i != 1) {
					throw new SQLException("No se pudo actualizar");
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			} finally {
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
		}
	}



